object Versions {
    val coreKtx = "1.8.0"
    val appcompat = "1.4.2"
    val material = "1.5.0"
    val constraintlayout = "2.1.3"
    val fragmentKtx = "2.4.1"
    val navigation = "2.4.1"
    val junit = "4.13.2"
    val extJunit = "1.1.3"
    val espressoCore = "3.4.0"

    val retrofit = "2.9.0"
    val rxjava = "3.1.5"
    val rxAndroid = "3.0.2"
    val lifecycle = "2.5.1"
    val okhttp = "4.10.0"
    val datastore = "1.0.0"
    val room_version = "2.5.0"
    val hilt = "2.45"
    val bitmapMonitor = "1.1.0"
}

object Android {
    val applicationId = "com.example.myapplication"
    val compileSdkVersion = 33
    val minSdkVersion = 21
    val targetSdkVersion = 33
    val versionCode = 1
    val versionName = "1.0"
}

object Dependencies {
    val coreKtx = "androidx.core:core-ktx:${Versions.coreKtx}"
    val appcompat = "androidx.appcompat:appcompat:${Versions.appcompat}"
    val material = "com.google.android.material:material:${Versions.material}"
    val constraintlayout = "androidx.constraintlayout:constraintlayout:${Versions.constraintlayout}"
    val fragmentKtx = "androidx.navigation:navigation-fragment-ktx:${Versions.fragmentKtx}"
    val navigation = "androidx.navigation:navigation-ui-ktx:${Versions.navigation}"
    val junit = "junit:junit:${Versions.junit}"
    val extJunit = "androidx.test.ext:junit:${Versions.extJunit}"
    val espressoCore = "androidx.test.espresso:espresso-core:${Versions.espressoCore}"

    val rxjava = "io.reactivex.rxjava3:rxjava:${Versions.rxjava}"
    val rxAndroid = "io.reactivex.rxjava3:rxandroid:${Versions.rxAndroid}"
    val retrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}"
    val converterGson = "com.squareup.retrofit2:converter-gson:${Versions.retrofit}"
    val adapterRxjava = "com.squareup.retrofit2:adapter-rxjava:${Versions.retrofit}"
    val datastore = "androidx.datastore:datastore-preferences:${Versions.datastore}"
    // optional - RxJava3 support
    val datastoreRxjava3 = "androidx.datastore:datastore-preferences-rxjava3:${Versions.datastore}"

    // ViewModel
    val viewModel = "androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycle}"
    // LiveData
    val liveData = "androidx.lifecycle:lifecycle-livedata-ktx:${Versions.lifecycle}"
    // Lifecycles only (without ViewModel or LiveData)
    val lifecycles = "androidx.lifecycle:lifecycle-runtime-ktx:${Versions.lifecycle}"
    // Saved state module for ViewModel
    val viewmodelSavedstate = "androidx.lifecycle:lifecycle-viewmodel-savedstate:${Versions.lifecycle}"
    // Annotation processor
    val lifecycleCompiler = "androidx.lifecycle:lifecycle-compiler:${Versions.lifecycle}"

    val room = "androidx.room:room-runtime:${Versions.room_version}"
    // To use Kotlin Symbol Processing (KSP)
    val roomCompiler = "androidx.room:room-compiler:${Versions.room_version}"
    // optional - Kotlin Extensions and Coroutines support for Room
    val roomKtx = "androidx.room:room-ktx:${Versions.room_version}"

    val hilt = "com.google.dagger:hilt-android:${Versions.hilt}"
    val hiltCompiler = "com.google.dagger:hilt-android-compiler:${Versions.hilt}"

    val bitmapMonitor = "io.github.shixinzhang:android-bitmap-monitor:${Versions.bitmapMonitor}"

    val okhttp = "com.squareup.okhttp3:okhttp:${Versions.okhttp}"
    val okhttpLogInterceptor = "com.squareup.okhttp3:logging-interceptor:${Versions.okhttp}"
}